#include "dominion.h"
#include "dominion_helpers.h"
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include "rngs.h"

// set NOISY_TEST to 0 to remove printfs from output
#define NOISY_TEST 1

int main() {
        int i;
        int seed = 1000;
        int numPlayer = 2;
        int maxBonus = 10;
        int p, r, handCount;
        int bonus;
        int numActions = 0;
        int outpostPlayed = 0;
        int k[10] = {adventurer, council_room, feast, gardens, mine
                     , remodel, smithy, village, baron, great_hall};
        struct gameState G;
        int maxHandCount = 5;
        // arrays of all coppers, silvers, and golds
        int coppers[MAX_HAND];
        int silvers[MAX_HAND];
        int golds[MAX_HAND];
        for (i = 0; i < MAX_HAND; i++)
                {
                        coppers[i] = copper;
                        silvers[i] = silver;
                        golds[i] = gold;
                }

        printf ("TESTING card effect outpost:\n");

        for (p = 0; p < numPlayer; p++) {
                for (handCount = 1; handCount <= maxHandCount; handCount++) {

#if (NOISY_TEST == 1)
                        printf("Test player %d with %d card(s) in hand\n", p, handCount);
#endif
                        memset(&G, 23, sizeof(struct gameState));   // clear the game state
                        r = initializeGame(numPlayer, k, seed, &G); // initialize a new game
                        G.handCount[p] = handCount;                 // set the number of cards on hand
                        memcpy(G.hand[p], coppers, sizeof(int) * handCount); // set all the cards to copper

                        G.hand[p][0] = outpost;
                        outpostPlayed = G.outpostPlayed;
                        G.whoseTurn = p;

                        printf("before G.hand[p][0] = %d\n", G.hand[p][0]);

                        cardEffect(outpost, 0, 0, 0, &G, 0, 0);
#if (NOISY_TEST == 1)
                        printf("after G.hand[p][0] = %d\n", G.hand[p][0]);
                        printf("handCount = %d\n", G.handCount[p]);
#endif
                        assert(G.handCount[p] == handCount - 1);
                        assert(G.outpostPlayed == outpostPlayed + 1); // check if card was successful
                }
        }

        printf("All tests passed!\n");

        return 0;
}
